package com.ps.helpdesk.business;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import com.ps.helpdesk.model.Usuario;
import com.ps.helpdesk.persistence.DAO;
import com.ps.helpdesk.persistence.ManagerConnection;
import com.ps.helpdesk.persistence.ManagerEntity;


public class BusinessUsuario {
	
	private String mensagem;
	

	public BusinessUsuario() {		
	}	
	
	public String getMensagem() {	
		return mensagem;
	}
	
	public void setMensagem( final String mensagem ) {	
		this.mensagem = mensagem;
	}	

	public List<Usuario> findAll() {
		
		DAO<Usuario> dao = new ManagerEntity<Usuario>();
		EntityManager m = ManagerConnection.getInstance().getManager();

		Query query = m.createNativeQuery( 
				"select * from helpdesk.Usuario order by idusuario", Usuario.class );
		List<Usuario> usuarios = dao.list( query );
		
		return usuarios;
	}

	public Usuario find( final Object id ) {
		
		Usuario usuario = null;
		try {
			String key = id.toString().trim();
			
			DAO<Usuario> dao = new ManagerEntity<Usuario>();
			usuario = dao.find( Usuario.class, key );
		}
		catch ( Exception e ) {
			setMensagem( 
					"Erro ao buscar usuario.\n" +
					"[" + e.getMessage() + "]" );
			e.printStackTrace();
		}
		
		return usuario;
	}
	
	public boolean validar( final Usuario Usuario ) {
		return true;
	}

	public boolean persist( Usuario usuario ) {
		
		boolean actionReturn = false;
		
		if ( validar( usuario ) ) {
			try {
				DAO<Usuario> dao = new ManagerEntity<Usuario>();	
				
				Usuario tmp = dao.find( Usuario.class, usuario.getIdusuario() );			
				if ( tmp != null ) {
					tmp.setNomecompleto( usuario.getNomecompleto() );
					tmp.setEmail( usuario.getEmail() );
					tmp.setFone( usuario.getFone() );
					usuario = tmp;
				}
				
				actionReturn = dao.persist( usuario );
				
				if ( ! actionReturn ) {
					setMensagem( dao.getMensagem() );
				}
			}
			catch ( RuntimeException e ) {
				setMensagem( 
						"Erro ao salvar usuario.\n"+
						"[" + e.getMessage() + "]" );
				e.printStackTrace();
			}
		}
		
		return actionReturn;
	}

	public boolean remove( final Object idusuario ) {
		
		boolean actionReturn = false;
		
		try {
			DAO<Usuario> dao = new ManagerEntity<Usuario>();	
			Usuario usuario = dao.find( Usuario.class, idusuario );			
			
			actionReturn = dao.remove( usuario );
			
			if ( ! actionReturn ) {
				setMensagem( dao.getMensagem() );
			}
		}
		catch ( RuntimeException e ) {
			setMensagem( 
					"Erro ao remover usuario.\n"+
					"[" + e.getMessage() + "]" );
			e.printStackTrace();
		}
		
		return actionReturn;
	}
	
}
